//
//  RootViewController.m
//  UI17_初级数据持久化
//
//  Created by dllo on 15/12/1.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import "RootViewController.h"
#import "Student.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 沙盒主路径
//    Document              -        存储用户数据，需要备份的信息
//    Library/Caches        -      存储缓存文件，程序专用的支持文件
//    Library/Preferences   -    存储应用程序的偏好设置文件
//    tmp	    -				存储临时文件。比如：下载的zip包，解压后的再删除。
//    .app   	-    程序包(iOS8时，app不存储在沙盒中，有单独的文件夹存储所有程序的app包)
    
    NSLog(@"%@", NSHomeDirectory());
//
//    // 获取沙盒中的具体文件夹路径
//    // 参数1:获取哪个文件夹路径:
////    NSHomeDirectory——————->沙盒主路径
////    NSDocumentDirectory————>Documents文件夹
////    NSLibraryDirectory——————>Library文件夹
////    NSCachesDiectory——————>Caches文件夹
////    NSTemporaryDirectory()———>tmp文件夹
//    // 参数2:在哪个文件系统下索引这个路径
//    // 参数3:绝对路径/相对路径
//    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//    
//    // 拼接要存储内容的文件路径
//    NSString *filePath = [path stringByAppendingPathComponent:@"str.txt"];
//    
//    NSString *songStr = @"<单身情歌> - 春儿";
//    
//    // 将内容写进文件中
//    // 参数1:路径
//    // 参数2:是否安全保护
//    // 参数3:编码
//    // 参数4:错误信息
//    [songStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//    
//    // 读取本地文件
//    NSString *strContect = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
//    NSLog(@"%@", strContect);
    
    
    // 存储简单类型数据的步骤:
    // 1, 获取要存储的路径
    // 2, 拼接要存储内容的文件名
    // 3, 写入内容到文件
    // 4, 读取文件内容
    // 注: 简单类型 - 系统有的(NSString, NSArray, NSDictionary等)
    //     复杂类型 - 自定义的(Student等)
    
    
    // 存个数组
//    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//    
//    NSString *filePath = [path stringByAppendingPathComponent:@"arr.xml"];
//    
//    NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
//    
//    [arr writeToFile:filePath atomically:YES];
//    
//    NSArray *getArr = [NSArray arrayWithContentsOfFile:filePath];
//    NSLog(@"%@", getArr);
    
    
    // 存储复杂类型对象
    Student *stu = [[Student alloc] init];
    stu.name = @"王宁";
    stu.sex = @"男";
    stu.num = 1;
    stu.score = 99.9;
    
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    NSString *filePath = [path stringByAppendingPathComponent:@"stuData.aaa"];
    
    // 1, 签订NSCoding协议
    // 2, 在Student中实现协议方法
    // 3, 归档(放到连续空间并存入)
    [NSKeyedArchiver archiveRootObject:stu toFile:filePath];
    
    // 4, 反归档(读取)
    Student *getStu = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    
    NSLog(@"%@ %@ %ld %.1f", getStu.name, getStu.sex, getStu.num, getStu.score);
    
    // 获取剪切操作的目的路径
    NSString *cachs = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *desFilePath = [cachs stringByAppendingPathComponent:@"desStu.bbb"];
    
    
    // 文件管理
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    
    // 返回值: 操作是否成功
    // 在剪切不成功时, 原路径文件不会删除
    BOOL ret = [fileMgr moveItemAtPath:filePath toPath:desFilePath error:nil];
    NSLog(@"%d", ret);
    
    // 判断文件是否存在
    BOOL ret1 = [fileMgr fileExistsAtPath:desFilePath];
    NSLog(@"%d", ret1);
    
    // 拷贝
//    - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
    
    // 删除
//    - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
